Appearance
class类中的方法
本节目标:理解“class类中的方法”的核心思路,并能把它用于实际开发或面试表达。
不用function关键字:直接把函数定义放进去了就可以了。方法间不用逗号分隔:加了会报错。类的内部所有定义的方法不可枚举这一点与 ES5 的行为不一致。ES5中自定义的原型属性和方法默认都是可枚举的。
class Point {
constructor(x, y) {
// ...
}
toString() {
// ...
}
}
Object.keys(Point.prototype)
// []
Object.getOwnPropertyNames(Point.prototype)
// ["constructor","toString"]**Generator** **方法**
如果某个方法之前加上星号(*),就表示该方法是一个 Generator 函数。
class Foo { constructor(...args) { this.args = args; } * [Symbol.iterator]() { for (let arg of this.args) { yield arg; } }}
for (let x of new Foo('hello', 'world')) { console.log(x);}// hello// world
上面代码中,Foo类的Symbol.iterator方法前有一个星号,表示该方法是一个 Generator 函数。Symbol.iterator方法返回一个Foo类的默认遍历器,for...of循环会自动调用这个遍历器。